package com.sg.qcgl.infra.repository.ball_team;

import com.aimoss.core.pojo.PageBean;
import com.aimoss.core.util.ConvertUtils; // 工具类，用于类型转换
import com.sg.qcgl.infra.repository.ball_team.convertor.BallTeamConvertor; // 数据转换器
import com.sg.qcgl.domain.ball_team.model.BallTeam; // 领域模型
import com.sg.qcgl.domain.ball_team.gateway.BallTeamGateway; // 网关接口
import com.sg.qcgl.infra.repository.ball_team.dataobject.BallTeamDO; // 数据对象
import com.sg.qcgl.client.ball_team.dto.BallTeamDTO; // 查询DTO
import com.sg.qcgl.client.ball_team.dto.BallTeamPageQueryDTO; // 分页查询DTO
import com.sg.qcgl.infra.repository.ball_team.mapper.BallTeamMapper; // Mapper接口
import com.sg.qcgl.client.ball_team.vo.BallTeamVO; // 视图对象
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; // MyBatis-Plus 分页接口
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // MyBatis-Plus 分页封装类
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; // MyBatis-Plus 服务实现基类
import org.springframework.stereotype.Repository; // Spring Repository 注解

import javax.annotation.Resource; // 资源注入注解
import java.util.List; // 列表工具类
import java.util.Optional;

/**
 * 网关实现类
 * 实现 BallTeamGateway 接口和 BallTeamRepository 接口
 */
@Repository // 标识该类为数据访问层组件
public class BallTeamGatewayImpl extends ServiceImpl<BallTeamMapper, BallTeamDO> implements BallTeamGateway {

    @Resource // 注入 BallTeamMapper
    private BallTeamMapper ballTeamMapper;

    @Resource
    private  BallTeamRepository ballTeamRepository;

    /**
     * 分页查询
     *
     * @param pageQueryParams 分页查询参数
     * @return 分页结果
     */
    @Override
    public PageBean<BallTeamVO> page(BallTeamPageQueryDTO pageQueryParams) {
        // 创建分页对象
        Page<BallTeamVO> page = new Page<>(pageQueryParams.getPageNo(), pageQueryParams.getLimit());
        // 调用 Mapper 查询分页数据
        IPage<BallTeamVO> selectPage = ballTeamMapper.page(page, pageQueryParams);
        // 将 MyBatis-Plus 分页结果转换为自定义分页结果
        return ConvertUtils.convertPage(selectPage);
    }



    @Override
    public BallTeam findById(Long id) {
        Optional<BallTeam> optionalBallTeam = ballTeamRepository.findById(id);
        return optionalBallTeam.orElse(null);
    }

    /**
     * 查询列表
     *
     * @param queryDTO 查询参数
     * @return 视图对象列表
     */
    @Override
    public List<BallTeamVO> list(BallTeamDTO queryDTO) {
        // 调用 Mapper 查询列表
        return ballTeamMapper.list(queryDTO);
    }

    /**
     * 判断是否存在
     *
     * @param ballTeamParams 参数
     * @return 是否存在
     */
    @Override
    public Boolean judgeExist(BallTeam ballTeamParams) {
        // 根据参数中的账号查找
        BallTeam ballTeam = this.findById(ballTeamParams.getId());
        // 判断是否存在
        return ballTeam != null;
    }

    /**
     * 保存信息
     *
     * @param ballTeam 领域模型
     */
    @Override
    public void create(BallTeam ballTeam) {
        ballTeamRepository.save(ballTeam);
    }

    /**
     * 更新信息
     *
    * @param ballTeam     领域模型
     */
    @Override
    public void updateById(BallTeam ballTeam) {
        ballTeamRepository.save( ballTeam);
    }

    @Override
    public void deleteById(BallTeam ballTeam) {
        // TODO
    }


}
